//
//  HACRouter.h
//  HACRouter
//
//  Created by Chengjie on 2019/4/25.
//  Copyright © 2019 Happy. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "HACRouterMacro.h"
#import "HACRouterUrlParserRules.h"

NS_ASSUME_NONNULL_BEGIN

@interface HACRouter : NSObject

/**
 设置白名单列表

 @param hosts host 白名单列表
 @param schemes scheme 白名单列表
 */
+ (void)configRouterWhiteHosts:(NSSet *)hosts whiteSchemes:(NSSet *)schemes;

/**
 生成log日志文件的位置
 文件中包含所有的路由详细信息方便业务组间查询调用

 @param filePath Mac文件路径
 */
+ (void)generateRouterLogWithMacFilePath:(NSString *)filePath;

/**
 生成Router 头文件
 文件中包含所有的路由详细信息方便业务组间查询调用
 
 @param filePath Mac文件路径
 */
+ (void)generateRouterHeaderWithMacFilePath:(NSString *)filePath;

/**
 此处默认实现了一种url解析方法，如果业务需要复杂的解析方法，
 可以自行实现 HACRouterUrlParserRules 协议自定义
 是否通过URLs链接原生路由，
 通过urls的参数去匹配一个原生的路由路径并跳转
 
 使用的场景：
 1.url打开app进入指定页面
 2.消息通知打开app指定页面
 3.短信打开app进入指定页面
 4.在webview导航时候，进入原生页面
 对于上述的情形，建议匹配的路由在定义的时候只传递
 字符串
 字符串可转换的类型
 

 @param urls 传入一个urls
 @return 匹配结果,nil代表没有需要路由转发的对象
 */
+ (id)routerWithUrls:(NSString *)urls;
/** 当 customParser 为nil时，与 routerWithUrls: 方法相同 */
+ (id)routerWithUrls:(NSString *)urls customParser:(nullable id<HACRouterUrlParserRules>)parser;

/**
 获取路径下对应的类

 @param path 路径
 @return 类对象
 */
+ (Class)getClassForPath:(NSString *)path;

@end

NS_ASSUME_NONNULL_END
